package com.example.smssender.contactimport;

import android.content.Context;
import android.net.Uri;
import com.example.smssender.Contact;
import com.example.smssender.DataManager;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 联系人导入管理器
 */
public class ContactImportManager {
    
    /**
     * 执行导入
     */
    public static ImportResult executeImport(Context context, ContactImporter importer, Uri source) {
        if (importer == null) {
            ImportResult result = new ImportResult();
            result.setSuccess(false);
            result.addError("导入器未指定");
            return result;
        }
        
        try {
            return importer.importContacts(context, source);
        } catch (Exception e) {
            ImportResult result = new ImportResult();
            result.setSuccess(false);
            result.addError("导入失败：" + e.getMessage());
            return result;
        }
    }
    
    /**
     * 保存导入的联系人（自动去重）
     */
    public static void saveImportedContacts(Context context, List<Contact> contacts) {
        if (contacts == null || contacts.isEmpty()) {
            return;
        }
        
        DataManager dataManager = DataManager.getInstance(context);
        List<Contact> existingContacts = dataManager.getContacts();
        
        // 获取已存在的手机号集合
        Set<String> existingPhones = new HashSet<>();
        for (Contact contact : existingContacts) {
            if (contact != null && contact.getPhoneNumber() != null) {
                existingPhones.add(normalizePhoneNumber(contact.getPhoneNumber()));
            }
        }
        
        // 过滤重复的联系人
        List<Contact> uniqueContacts = new ArrayList<>();
        for (Contact contact : contacts) {
            if (contact != null && contact.getPhoneNumber() != null) {
                String normalizedPhone = normalizePhoneNumber(contact.getPhoneNumber());
                if (!existingPhones.contains(normalizedPhone)) {
                    uniqueContacts.add(contact);
                    existingPhones.add(normalizedPhone);
                }
            }
        }
        
        // 批量保存到数据库（提高性能）
        if (!uniqueContacts.isEmpty()) {
            existingContacts.addAll(uniqueContacts);
            dataManager.saveContacts(existingContacts);
        }
    }
    
    /**
     * 验证联系人数据
     */
    public static boolean validateContact(Contact contact) {
        if (contact == null) {
            return false;
        }
        
        String name = contact.getName();
        String phone = contact.getPhoneNumber();
        
        // 姓名不能为空
        if (name == null || name.trim().isEmpty()) {
            return false;
        }
        
        // 手机号格式验证（中国手机号：1[3-9]xxxxxxxxx）
        if (phone == null || phone.trim().isEmpty()) {
            return false;
        }
        
        // 清理手机号（移除空格、横线等）
        String normalizedPhone = normalizePhoneNumber(phone);
        if (!normalizedPhone.matches("^1[3-9]\\d{9}$")) {
            return false;
        }
        
        return true;
    }
    
    /**
     * 规范化手机号（移除空格、横线、括号等）
     */
    public static String normalizePhoneNumber(String phone) {
        if (phone == null) {
            return "";
        }
        // 移除所有非数字字符
        return phone.replaceAll("[^0-9]", "");
    }
    
    /**
     * 计算导入统计信息（有效、无效、重复）
     */
    public static ImportStatistics calculateStatistics(Context context, List<Contact> contacts) {
        ImportStatistics stats = new ImportStatistics();
        stats.totalCount = contacts.size();
        
        DataManager dataManager = DataManager.getInstance(context);
        List<Contact> existingContacts = dataManager.getContacts();
        Set<String> existingPhones = new HashSet<>();
        for (Contact contact : existingContacts) {
            if (contact != null && contact.getPhoneNumber() != null) {
                existingPhones.add(normalizePhoneNumber(contact.getPhoneNumber()));
            }
        }
        
        Set<String> processedPhones = new HashSet<>();
        for (Contact contact : contacts) {
            if (contact == null) {
                stats.invalidCount++;
                continue;
            }
            
            // 验证数据
            if (!validateContact(contact)) {
                stats.invalidCount++;
                continue;
            }
            
            String normalizedPhone = normalizePhoneNumber(contact.getPhoneNumber());
            
            // 检查重复（在当前导入列表中）
            if (processedPhones.contains(normalizedPhone)) {
                stats.duplicateCount++;
                continue;
            }
            
            // 检查与已有联系人重复
            if (existingPhones.contains(normalizedPhone)) {
                stats.duplicateCount++;
                continue;
            }
            
            processedPhones.add(normalizedPhone);
            stats.validCount++;
        }
        
        return stats;
    }
    
    /**
     * 导入统计信息
     */
    public static class ImportStatistics {
        public int totalCount = 0;
        public int validCount = 0;
        public int invalidCount = 0;
        public int duplicateCount = 0;
    }
}

